package com.ccnf.core.bean;

import lombok.Data;

import java.io.Serializable;

/**
 * 响应回页面的数据统一格式
 */
@Data
public class Response implements Serializable {
    /**
     * 响应的状态码
     */
    private int code = StatusCode.SUCCESS.getCode();
    /**
     * 响应的消息描述
     */
    private String message = StatusCode.SUCCESS.getDescription();

    protected Response() {
    }

    protected Response(String message) {
        this.message = message;
    }

    protected Response(int code, String message) {
        this.code = code;
        this.message = message;
    }

    protected Response(StatusCode statusCode, String message) {
        this.code = statusCode.getCode();
        this.message = message;
    }

    /**
     * 响应code：1, message: "异常信息", data: null的数据
     * @param code 出现异常的响应码
     * @param e 出现的异常
     */
    protected Response(int code, Throwable e) {
        this.code = code;
        this.message = e.getMessage();
    }

    /**
     * 请求成功时返回的数据
     */
    public static Response success() {
        return new Response();
    }

    /**
     * 请求成功时返回的数据，并可自定义请求成功时返回的消息内容
     * @param message 响应消息
     */
    public static Response successWithMessage(String message) {
        return new Response(message);
    }

    /**
     * 出现请求出错时返回的数据
     * @param code 错误码
     * @param message 错误消息
     */
    public static Response failure(int code, String message) {
        return new Response(code, message);
    }

    /**
     * 出现请求出错时返回的数据
     * @param statuscode 错误码
     * @param message 错误消息
     */
    public static Response failure(StatusCode statuscode, String message) {
        return new Response(statuscode, message);
    }

    /**
     * 出现异常时返回的数据，用于出现异常返回
     * @param e 出现的异常
     */
    public static Response error(int code, Throwable e) {
        return new Response(code, e);
    }
}
